/*
 * DoencaGenerica.java
 *
 * Created on 15 de Maio de 2007, 10:56
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package pt.iscte.dcti.es.rhplus.utilizador;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.Hashtable;
import java.util.LinkedList;

import pt.iscte.dcti.es.rhplus.sistema.persistencia.AcessoBD;

/**
 * 
 * @author Gustavo Cabral
 * @author Helena Monteiro
 * @author Joao Catarino
 * @author Tiago Moreiras
 */
public class DoencaPassada {

	/** Creates a new instance of DoencaPassada */
	public DoencaPassada(final int id_doenca_passada, final int id_doenca_generica, final int id_pessoa, final Date data, final String sintomas,
			final String tratamento) {

		this.id_doenca_passada = id_doenca_passada;
		this.id_doenca_generica = id_doenca_generica;
		this.id_pessoa = id_pessoa;
		this.data = data;
		this.sintomas = sintomas;
		this.tratamento = tratamento;
	}

	public int getIdDoencaPassada() {
		return id_doenca_passada;
	}

	public int getIdDoencaGenerica() {
		return id_doenca_generica;
	}

	public int getIdPessoa() {
		return id_pessoa;
	}

	public Date getData() {
		return data;
	}

	public void setData(final Date data) {
		this.data = data;
	}

	public String getSintomas() {
		return sintomas;
	}

	public void setSintomas(final String sintomas) {
		this.sintomas = sintomas;
	}

	public String getTratamento() {
		return tratamento;
	}

	public void setTratamento(final String tratamento) {
		this.tratamento = tratamento;
	}

	public static DoencaPassada devolve(final int id_doenca_passada) throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_doenca_passada");
		Hashtable<String, Object> dados_da_doenca_passada = new Hashtable<String, Object>();
		dados_da_doenca_passada.put("var_id_doenca_passada", id_doenca_passada);

		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_da_doenca_passada);

		result_set.next();

		// Cria a doenca passada
		int id_doenca_generica = result_set.getInt("id_doenca_generica");
		int id_pessoa = result_set.getInt("id_pessoa");
		Date data = result_set.getDate("data");
		String sintomas = result_set.getString("sintomas");
		String tratamento = result_set.getString("tratamento");

		acesso_bd.fechaLigacao();

		DoencaPassada doenca_passada = new DoencaPassada(id_doenca_passada, id_doenca_generica, id_pessoa, data, sintomas, tratamento);

		return doenca_passada;
	}

	public static LinkedList<DoencaPassada> devolveTodas() throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todas_as_doencas_passadas");
		ResultSet result_set = acesso_bd.executaSelect(qryName, null);

		// Criar a lista de Doenças Passadas
		LinkedList<DoencaPassada> lista_de_doencas_passadas = new LinkedList<DoencaPassada>();

		while (result_set.next()) {

			// Cria a doenca passada
			int id_doenca_passada = result_set.getInt("id_doenca_passada");
			int id_doenca_generica = result_set.getInt("id_doenca_generica");
			int id_pessoa = result_set.getInt("id_pessoa");
			Date data = result_set.getDate("data");
			String sintomas = result_set.getString("sintomas");
			String tratamento = result_set.getString("tratamento");

			DoencaPassada doenca_passada = new DoencaPassada(id_doenca_passada, id_doenca_generica, id_pessoa, data, sintomas, tratamento);

			lista_de_doencas_passadas.add(doenca_passada);
		}

		acesso_bd.fechaLigacao();

		return lista_de_doencas_passadas;
	}

	public static LinkedList<DoencaPassada> devolveTodasDoUtente(final int id_pessoa) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todas_as_doencas_passadas_do_utente");
		Hashtable<String, Object> dados_da_pessoa = new Hashtable<String, Object>();
		dados_da_pessoa.put("var_id_pessoa", new Integer(id_pessoa));

		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_da_pessoa);

		// Criar a lista de Doenças Passadas
		LinkedList<DoencaPassada> lista_de_doencas_passadas = new LinkedList<DoencaPassada>();

		while (result_set.next()) {

			// Cria a doenca passada
			int id_doenca_passada = result_set.getInt("id_doenca_passada");
			int id_doenca_generica = result_set.getInt("id_doenca_generica");
			Date data = result_set.getDate("data");
			String sintomas = result_set.getString("sintomas");
			String tratamento = result_set.getString("tratamento");

			DoencaPassada doenca_passada = new DoencaPassada(id_doenca_passada, id_doenca_generica, id_pessoa, data, sintomas, tratamento);

			lista_de_doencas_passadas.add(doenca_passada);
		}

		acesso_bd.fechaLigacao();

		return lista_de_doencas_passadas;
	}

	public static LinkedList<DoencaPassada> devolveTodasDoMesmoTipo(final int id_doenca_generica) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_todas_as_doencas_passadas_por_doenca_generica");
		Hashtable<String, Object> dados_da_doenca_generica = new Hashtable<String, Object>();
		dados_da_doenca_generica.put("var_id_doence_generica", new Integer(id_doenca_generica));

		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_da_doenca_generica);

		// Criar a lista de Doenças Passadas
		LinkedList<DoencaPassada> lista_de_doencas_passadas = new LinkedList<DoencaPassada>();

		while (result_set.next()) {

			// Cria a doenca generica
			int id_doenca_passada = result_set.getInt("id_doenca_passada");
			int id_pessoa = result_set.getInt("id_pessoa");
			Date data = result_set.getDate("data");
			String sintomas = result_set.getString("sintomas");
			String tratamento = result_set.getString("tratamento");

			DoencaPassada doenca_passada = new DoencaPassada(id_doenca_passada, id_doenca_generica, id_pessoa, data, sintomas, tratamento);

			lista_de_doencas_passadas.add(doenca_passada);
		}

		acesso_bd.fechaLigacao();

		return lista_de_doencas_passadas;
	}

	public static void insere(final Hashtable<String, Object> dados_da_doenca_passada) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("inserir_doenca_passada");
		acesso_bd.executaUpdate(qryName, dados_da_doenca_passada);
		acesso_bd.fechaLigacao();
	}

	public static void altera(final Hashtable<String, Object> dados_da_doenca_passada) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("alterar_doenca_passada");
		acesso_bd.executaUpdate(qryName, dados_da_doenca_passada);
		acesso_bd.fechaLigacao();
	}

	public static void remove(final int id_doenca_passada) throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {

		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("remover_doenca_passada");
		Hashtable<String, Object> dados_da_doenca_passada = new Hashtable<String, Object>();
		dados_da_doenca_passada.put("var_id_doenca_passada", new Integer(id_doenca_passada));

		acesso_bd.executaUpdate(qryName, dados_da_doenca_passada);
		acesso_bd.fechaLigacao();
	}

	public static int devolveUltimoIdentificadorDeInsercao() throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_ultimo_id_de_doenca_passada");
		ResultSet result_set = acesso_bd.executaSelect(qryName, null);
		result_set.next();
		int ultimo_id_doenca_passada = result_set.getInt("ultimo_id");
		acesso_bd.fechaLigacao();

		return ultimo_id_doenca_passada;
	}

	public void gravaParaBaseDeDados() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
		DoencaPassada.altera(toHashtable());
	}

	public boolean equals(final int id_doenca_passada) {
		return this.getIdDoencaGenerica() == id_doenca_passada;
	}

	public String toString() {
		return id_doenca_passada + ";" + id_doenca_generica + ";" + id_pessoa + ";" + sintomas + ";" + tratamento + ";" + data + ";";
	}

	public Hashtable<String, Object> toHashtable() {
		Hashtable<String, Object> dados_da_doenca_passada = new Hashtable<String, Object>();

		dados_da_doenca_passada.put("var_id_doenca_passada", new Integer(this.getIdDoencaPassada()));
		dados_da_doenca_passada.put("var_id_doenca_generica", new Integer(this.getIdDoencaGenerica()));
		dados_da_doenca_passada.put("var_id_pessoa", this.getIdPessoa());
		dados_da_doenca_passada.put("var_data", this.getData());
		dados_da_doenca_passada.put("var_sintomas", this.getSintomas());
		dados_da_doenca_passada.put("var_tratamento", this.getTratamento());

		return dados_da_doenca_passada;
	}

	private int id_doenca_passada;
	private int id_doenca_generica;
	private int id_pessoa;
	private Date data;
	private String sintomas;
	private String tratamento;

}
